package cn.com.idmy.cloud.util;

import cn.com.idmy.base.IEnum;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.UnmodifiableView;

import java.util.*;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class BizEnumUtil {
    public record IEnumOut(Object key, Object value, String title, String color) {
    }

    private static final Map<String, List<IEnumOut>> BIZ_ENUMS = new HashMap<>();

    public static @NotNull @UnmodifiableView Map<String, List<IEnumOut>> all() {
        return Collections.unmodifiableMap(BIZ_ENUMS);
    }

    public static List<IEnumOut> get(@NotNull String name) {
        return BIZ_ENUMS.get(name);
    }

    public static void register(@NotNull Class<? extends Enum<? extends IEnum<?>>> clazz) {
        var enums = clazz.getEnumConstants();
        var outs = new ArrayList<IEnumOut>(enums.length);
        for (int i = 0, len = enums.length; i < len; i++) {
            var tmp = enums[i];
            var e = (IEnum<?>) tmp;
            outs.add(new IEnumOut(tmp.name(), e.value(), e.title(), e.color()));
        }
        BIZ_ENUMS.put(clazz.getSimpleName(), outs);
    }
}
